home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 524 / 524.xpi / chrome / mid.jar / content / choose_dict.js < prev    next >
Text File  |  2009-09-16  |  17KB  |  544 lines

  1. //
  2. // choose_dict.js
  3. //
  4.  
  5. var midmyprefs = Components.classes["@mozilla.org/preferences-service;1"].
  6.     getService(Components.interfaces.nsIPrefBranch);
  7.  
  8. var mylines      = [];
  9. dictionary          = "default"
  10. ExtraClicked     = false;
  11. const miduuidlen = 37;
  12. midNS            = "http://mid.mozdev.org/dictionaries";
  13. allDictArray     = [];
  14. midmyDictionary  = "";
  15.  
  16.  
  17.  
  18. function dc__initAll()
  19. {
  20.  
  21.     if (!window.arguments) {
  22.         document.documentElement.getButton('extriDict').collapsed = true;
  23.         document.documentElement.getButton('extra2').collapsed = true;
  24.         document.documentElement.getButton('disclosure').collapsed = true;
  25.     } else {
  26.         if (!window.arguments[0].dictionary ||
  27.             window.arguments[0].dictionary == "" ||
  28.             window.arguments[0].dictionary == "temporary" ||
  29.             window.arguments[0].dictionary == "new"  ||
  30.             window.arguments[0].dictionary == "default") { 
  31.             document.documentElement.getButton('extra2').collapsed = true;
  32.         }
  33.         dictionary = window.arguments[0].dictionary; 
  34.     }
  35.     
  36.     //alert (window.arguments[0].dictionary);
  37.     //alert (dictionary);
  38.     
  39.    
  40.     var type, alltypes, i, j, mytabpanels, newCheck, mytype;
  41.     var mytabs, newTab, newTabPanel;
  42.     var newDictionary = [],  iDict = {};
  43.     var iType;
  44.     var midDtypeFirstTab = "";
  45.     var typesarray = [];
  46.  
  47.     alltypes = " ";
  48.  
  49.     for (i = 0; (iDict = document.getElementsByTagNameNS(midNS, "dict").item(i)); i++) {
  50.  
  51.         type = iDict.getAttribute("type");
  52.       
  53.         var marker = "";
  54.         if (iDict.getAttribute("special") == "yes") {
  55.             marker = "+";
  56.         }
  57.       
  58.         type = marker + type; 
  59.         if (typeof(allDictArray[type]) == "undefined") {
  60.         allDictArray[type] = [];
  61.         }
  62.  
  63.         newDictionary = new dc__dictionaryObj(
  64.                 iDict.getAttribute("dictid"), type, iDict.getAttribute("checked"), iDict.getAttribute("restrictions"), 0);
  65.  
  66.         allDictArray[type][iDict.getAttribute("label")]  = newDictionary;
  67.  
  68.         if (alltypes.indexOf(type) == -1) {
  69.             alltypes = alltypes + type + " ";
  70.             typesarray.push(type);
  71.        }
  72.     }
  73.     
  74.     typesarray.sort(
  75.         function(a, b) {
  76.             if ((b.charAt(0) == "+")  && (a.charAt(0) == "+")) { 
  77.                 return a.toLocaleLowerCase().localeCompare(b.toLocaleLowerCase());
  78.             }
  79.             if (b.charAt(0) == "+") {
  80.                 return -1;
  81.             }
  82.             if (a.charAt(0) == "+") {
  83.                 return  1;
  84.             }
  85.             return a.toLocaleLowerCase().localeCompare(b.toLocaleLowerCase()); 
  86.         }
  87.     );
  88.  
  89.     mytabs = document.getElementById("mid_dicttypetabs"); 
  90.     mytabpanels = document.getElementById("mid_dicttypetabpanels"); 
  91.  
  92.     for (i = 0; i < typesarray.length; i++) {
  93.         mytype = typesarray[i];
  94.         var first  = mytype.charAt(0).toUpperCase();
  95.         var tabid = "mid_choosdicttab" + first;
  96.  
  97.         if (!document.getElementById(tabid)) {
  98.             newTab = document.createElement("tab");
  99.             newTab.setAttribute("label", " " + first + " ");
  100.             newTab.setAttribute("id", tabid);
  101.             newTabPanel = document.createElement("listbox");
  102.             newTabPanel.setAttribute("rows", "14");
  103.             //newTabPanel.setAttribute("orient", "vertical");
  104.             newTabPanel.setAttribute("id", "mid_choosedictpanel" + first);
  105.             newTabPanel.setAttribute("onkeydown", "dc__typeCheckBoxChangeKey(event);");
  106.             mytabs.appendChild(newTab);
  107.             mytabpanels.appendChild(newTabPanel);
  108.         } else {
  109.             newTabPanel = document.getElementById("mid_choosedictpanel" + first);
  110.         }
  111.  
  112.         newCheck = document.createElement("listitem");
  113.         newCheck.setAttribute("type", "checkbox");
  114.         newCheck.setAttribute("id", "mid_choosedictcheck" + i);
  115.         newCheck.setAttribute("label", mytype.replace(/^\+/,""));
  116.         newCheck.setAttribute("value", mytype);
  117.         newCheck.setAttribute("crop", "none");
  118.         //newCheck.setAttribute("style", "margin-left: 10px !important;");
  119.         newCheck.setAttribute("onmousedown", "dc__typeCheckBoxChange(event);");
  120.         newTabPanel.appendChild(newCheck);
  121.         newCheck.setAttribute("checked", "false");
  122.         // newCheck.setAttribute("onfocus", "dt__onTypeCheckFocus(this);"); // new
  123.  
  124.         if (window.arguments)  {
  125.             // called from mid
  126.             if (dt__checkThisType(mytype)) {
  127.                 newCheck.setAttribute("checked", "true");
  128.             }
  129.         }
  130.         else {
  131.             // from preferences not very much used
  132.             if (midmyprefs.getPrefType("extensions.mid.dtype." + mytype) == midmyprefs.PREF_BOOL) {
  133.                 newCheck.setAttribute("checked", midmyprefs.getBoolPref("extensions.mid.dtype." + mytype.replace(/^\+/,"")));
  134.             } else {
  135.                 for (j = 0; (iType = document.getElementsByTagNameNS(midNS, "default-dict-type").item(j)); j++) {
  136.                     if (iType.getAttribute("label") == mytype.replace(/^\+/,"")) {
  137.                         newCheck.setAttribute("checked", "true");
  138.                     }
  139.                 } // XML
  140.             }
  141.         }
  142.  
  143.         if (newCheck.getAttribute("checked") == "true") {
  144.             document.getElementById(tabid).setAttribute("vanchecked","true");
  145.             dt__getDictionaries(mytype, "init");
  146.             if (midDtypeFirstTab == "") { 
  147.                 midDtypeFirstTab = tabid;
  148.             }
  149.         }
  150.  
  151.     }  // for
  152.  
  153.     if (midDtypeFirstTab != "") {
  154.         var midmyListbox = document.getElementById("mid_selectdictionaries");
  155.         midmyListbox.scrollToIndex(0);
  156.         midmyListbox.selectItem(midmyListbox.getItemAtIndex(1));
  157.         mytabs.selectedItem = document.getElementById(midDtypeFirstTab);
  158.     }
  159.     else { 
  160.         mytabs.selectedIndex = 0;
  161.     }
  162.     
  163.  
  164.  
  165.  
  166. function dc__dictionaryObj(middictId, middictType, middictChecked,
  167.                          middictRestrictions, middictIcon, midWeigth)
  168. {
  169.     this.middictId           = middictId;
  170.     this.middictType         = middictType;
  171.     this.middictChecked      = middictChecked;
  172.     this.middictRestrictions = middictRestrictions;
  173.     this.midWeigth           = middictIcon;
  174.     this.midWeigth           = midWeigth;
  175. }
  176.  
  177.  
  178.  
  179. function dc__saveToCurrent()
  180. {
  181.     dc__saveChanges();
  182.     window.close();
  183. }
  184.  
  185.  
  186.  
  187. function dc__saveChanges()
  188.  
  189.     var i, dt;
  190.     if (window.arguments) {
  191.         window.arguments[0].result = true;
  192.         dictionary = window.arguments[0].dictionary; 
  193.     }
  194.  
  195.     for (i = 0; (dt = document.getElementById("mid_dicttypetabbox").getElementsByTagName("listitem").item(i)); i++) {
  196.         if (dt.getAttribute("checked") == "true") {
  197.             if (dictionary == "default") {
  198.                 midmyprefs.setBoolPref("extensions.mid.dtype." + dt.getAttribute("label"), true);
  199.             }
  200.             dt__savePreferences(dt.getAttribute("value"));
  201.         } else {
  202.             if (dictionary == "default") {
  203.                 midmyprefs.setBoolPref("extensions.mid.dtype." +  dt.getAttribute("label"), false);
  204.             }
  205.         }
  206.     }
  207.  
  208.     if (dictionary != "default")  {
  209.         window.arguments[0].mylines = mylines;
  210.         window.arguments[0].result = false;
  211.     }
  212. }
  213.  
  214.  
  215.  
  216. function  dc__typeCheckBoxChangeKey(e)             
  217. {
  218.  
  219.     var key = e.which;
  220.     if (key == 32) {
  221.         dc__typeCheckBoxChange(e);
  222.     }
  223.  
  224.     return true;
  225. }
  226.  
  227.  
  228.  
  229. function  dc__typeCheckBoxChange(event)             
  230. {
  231.     event.stopPropagation();
  232.     
  233.     var i, midmypanel, midmylistitem, dt, vanchecked,
  234.          typeTab   = document.getElementById("mid_dicttypetabbox").selectedTab;
  235.  
  236.     if ('object' == typeof event) { 
  237.         if (event.type == "mousedown" && (0 != event.button)) {
  238.             event.preventDefault();
  239.             return true;
  240.         } // right click?
  241.     } else {
  242.         return;
  243.     }
  244.  
  245.     var mClickedNode = event.originalTarget;
  246.     if (mClickedNode.nodeName == "listbox") {
  247.         midmypanel = mClickedNode;
  248.         if (mClickedNode.selectedItem) {
  249.             midmylistitem = mClickedNode.currentItem;
  250.         }
  251.         else {
  252.             mClickedNode.selectItem(mClickedNode.getItemAtIndex(0));
  253.             midmylistitem = mClickedNode.currentItem;
  254.         }
  255.     } else {
  256.         if (mClickedNode.nodeName == "listitem") {
  257.             midmypanel = mClickedNode.parentNode;
  258.             midmylistitem = mClickedNode;
  259.         }
  260.     }
  261.  
  262.     if ((midmypanel.nodeName != "listbox") || (midmylistitem.nodeName != "listitem")) {
  263.         event.preventDefault();
  264.         return;
  265.     }
  266.  
  267.     vanchecked = false;
  268.  
  269.     if (!(midmylistitem.getAttribute("checked") == "true")) {    
  270.         dt__getDictionaries(midmylistitem.getAttribute("value"), "click");
  271.         vanchecked = true;
  272.     }
  273.     else {
  274.         dt__removeDictionariesFromList(midmylistitem.getAttribute("label"));
  275.         for (i = 0; (dt = midmypanel.getElementsByTagName("listitem").item(i));i++) {
  276.             if (!(dt == midmylistitem)) { 
  277.                 if (dt.getAttribute("checked") == "true") {
  278.                     vanchecked = true;
  279.                 }
  280.             }
  281.         }
  282.     }
  283.  
  284.     typeTab.setAttribute("vanchecked", vanchecked);
  285.  
  286. }
  287.  
  288.  
  289.  
  290. function dt__getDictionaries(mytype, callerType)
  291. {
  292.     var midmyListitem, midmyDictRestrictions, midmyDict, midmydDictionary, midmyId;
  293.     var realtype =  mytype.replace(/^\+/, ""); 
  294.     var midmyListbox = document.getElementById("mid_selectdictionaries");
  295.     midmyListbox.setAttribute("onkeypress", "dt__onKeypressDictionaryList(this, event);");
  296.  
  297.     var midmyListitemh =  document.createElement('listitem');
  298.     var midmyheader    = document.createElement('listcell');
  299.     midmyheader.setAttribute("label", realtype + " : ");
  300.     midmyheader.setAttribute("value", realtype);
  301.     var midmyplaceholder = document.createElement('listcell');
  302.     midmyListitemh.appendChild(midmyheader);
  303.     midmyListitemh.appendChild(midmyplaceholder);
  304.     midmyListitemh.setAttribute("disabled", true);
  305.     midmyListitemh.setAttribute("value", realtype);
  306.     midmyListbox.appendChild(midmyListitemh);
  307.  
  308.     for (midmydDictionary in allDictArray[mytype]) {
  309.         midmyListitem =  document.createElement('listitem');
  310.         midmyDictRestrictions = document.createElement('listcell');
  311.         midmyDict = document.createElement('listcell');
  312.         if (allDictArray[mytype][midmydDictionary].middictRestrictions == "") {
  313.             allDictArray[mytype][midmydDictionary].middictRestrictions = "-";
  314.         } else { 
  315.             midmyDictRestrictions.setAttribute('style', "color : red; min-width: 12em !important;");
  316.         }
  317.         midmyDictRestrictions.setAttribute('label', allDictArray[mytype][midmydDictionary].middictRestrictions);
  318.         midmyDictRestrictions.setAttribute("crop", "none"); 
  319.         midmyDict.setAttribute('label', midmydDictionary);
  320.         midmyDict.setAttribute('value', mytype);
  321.            
  322.         midmyListitem.setAttribute('value', realtype);
  323.         // midmyListitem.setAttribute("type", 'checkbox');
  324.         midmyDict.setAttribute("id", "mid_" + midmydDictionary);
  325.         midmyDict.setAttribute("type", "checkbox");
  326.         midmyDict.setAttribute("onclick", "dt__onselectDictionary(this);");
  327.  
  328.         midmyDict.setAttribute("style", "white-space : nowrap !important; min-width:14em;");
  329.         
  330.        // defaults from XUL. 
  331.         if (allDictArray[mytype][midmydDictionary].middictChecked  == "true") {
  332.             //alert("baj" + midmydDictionary);
  333.             midmyDict.setAttribute("checked", "true");
  334.         } else {
  335.             midmyDict.setAttribute("checked", "false");
  336.         }
  337.  
  338.         midmyId = allDictArray[mytype][midmydDictionary].middictId;
  339.  
  340.         if (midmyprefs.getPrefType("extensions.mid." + midmyId + "_checked") == midmyprefs.PREF_BOOL) {
  341.             if (midmyprefs.getBoolPref("extensions.mid." + midmyId + "_checked") == true) {
  342.                 allDictArray[mytype][midmydDictionary].middictChecked = "true";
  343.                 midmyDict.setAttribute("checked", "true");
  344.             } else {
  345.                 midmyDict.setAttribute("checked", "false");
  346.                 allDictArray[mytype][midmydDictionary].middictChecked = "false";
  347.             }
  348.         }  // pref exists?
  349.        
  350.         // from facts
  351.         if (window.opener && dt__checkThisType(mytype)) {
  352.             midmyDict.setAttribute("checked", "false");
  353.             allDictArray[mytype][midmydDictionary].middictChecked = "false";
  354.             if (window.opener.document.getElementById('tab' + midmyId)) {
  355.                 allDictArray[mytype][midmydDictionary].middictChecked = "false";
  356.                 if (!(window.opener.document.getElementById('tab' + midmyId).getAttribute("collapsed") == "true")) {
  357.                     allDictArray[mytype][midmydDictionary].middictChecked = "true";
  358.                     midmyDict.setAttribute("checked", "true");
  359.                 }
  360.             }
  361.         }
  362.         midmyListitem.appendChild(midmyDict);
  363.         midmyListitem.appendChild(midmyDictRestrictions);
  364.         midmyListbox.appendChild(midmyListitem);
  365.         midmyListitem.setAttribute("allowevents", "true");
  366.     } // for
  367.  
  368.     // midmyListbox.refresh; midmyListbox.ensureElementIsVisible(midmyListitemh);  
  369.  
  370.     if (callerType != "init") {
  371.         var x = midmyListbox.getIndexOfItem(midmyListitemh);
  372.         midmyListbox.ensureIndexIsVisible(x + 1);
  373.         midmyListbox.selectItem(midmyListbox.getItemAtIndex(x + 1));
  374.     }
  375.  
  376. }
  377.  
  378.  
  379.  
  380. function dt__checkThisType(mytype) 
  381. {
  382.  
  383.     var ctab, retvalue = false;
  384.     
  385.     for (var midmydDictionary in allDictArray[mytype]) {
  386.         ctab = window.opener.document.getElementById('tab' + allDictArray[mytype][midmydDictionary].middictId);  
  387.         if (ctab) {
  388.             if (ctab.getAttribute("collapsed") != "true") {
  389.                 retvalue = true;
  390.             }
  391.         }
  392.     }
  393.     return retvalue;
  394.  
  395. }
  396.  
  397.  
  398.  
  399. function dt__removeDictionariesFromList(mytype)
  400. {
  401.     var i, li;
  402.     var midmyListbox = document.getElementById("mid_selectdictionaries");
  403.  
  404.     midmyListbox.clearSelection();
  405.     var c = midmyListbox.getRowCount();
  406.     midmyListbox.scrollToIndex(0);
  407.     // midmyListbox.ensureIndexIsVisible(0); //?
  408.  
  409.     for (i = c - 1; (i > - 1); i--) {
  410.         li = midmyListbox.getItemAtIndex(i);
  411.         if ((li.getAttribute("value") == mytype) || (li.getAttribute("value") == "+" + mytype)) {
  412.             while (li.hasChildNodes()) {
  413.                 li.removeChild(li.lastChild);
  414.             }
  415.                midmyListbox.removeItemAt(midmyListbox.getIndexOfItem(li));
  416.             li = null;
  417.         }
  418.     }
  419.  
  420. }
  421.  
  422.  
  423.  
  424.  
  425. function dt__onselectDictionary(c)
  426. {
  427.  
  428.     var m               = c; 
  429.     var midmyDictionary = m.getAttribute("label");
  430.     var midmytype       = m.getAttribute("value");
  431.     var checked            = m.getAttribute("checked");
  432.  
  433.     if (checked == "true") {
  434.         allDictArray[midmytype][midmyDictionary].middictChecked = "false";
  435.         m.setAttribute("checked", "false"); 
  436.     }
  437.     else { 
  438.         allDictArray[midmytype][midmyDictionary].middictChecked = "true";
  439.         m.setAttribute("checked", "true");
  440.     }
  441.     // m.refresh;
  442.    
  443. }
  444.  
  445.  
  446.  
  447. function dt__savePreferences(mytype) 
  448. {
  449.  
  450.     var middictId, midmyDictionary, middictChecked = false;
  451.  
  452.     for (midmyDictionary in allDictArray[mytype]) {
  453.         middictId = allDictArray[mytype][midmyDictionary].middictId; 
  454.         if (allDictArray[mytype][midmyDictionary].middictChecked == "true") {
  455.             mylines.push(middictId);
  456.             middictChecked = true;
  457.         }
  458.         else {
  459.             middictChecked = false;
  460.             if (mylines.join().indexOf(middictId) > -1) {
  461.                 mylines.splice((mylines.join().indexOf(middictId) / 37), 1); 
  462.             }
  463.         }
  464.         if (dictionary == "default") {
  465.             midmyprefs.setBoolPref("extensions.mid." + middictId + "_checked", middictChecked);
  466.         }
  467.     } 
  468.     return true;
  469.  
  470. }
  471.  
  472.  
  473.  
  474. function  dt__onKeypressDictionaryList(lb, e)
  475. {
  476.  
  477.     var key = e.which;
  478.     
  479.     if (key == 32) {
  480.         dt__onselectDictionary(lb.selectedItem.getElementsByTagName("listcell").item(0));
  481.     }
  482.     
  483.     // event.preventDefault(); ??
  484.     // event.stopPropagation(); ??
  485.  
  486.     return true;
  487.  
  488. }
  489.  
  490.  
  491.  
  492. function dt__firstSelTabFocus()
  493. {
  494.     var mytabs = document.getElementById("mid_dicttypetabs"); 
  495.     mytabs.selectedItem.focus();
  496. }
  497.  
  498.  
  499.  
  500.  
  501. function dt__onTypeCheckFocus(tc)
  502. {
  503.     var xpcomInterface = tc.parentNode.boxObject.QueryInterface(
  504.         Components.interfaces.nsIScrollBoxObject);
  505.     xpcomInterface.ensureElementIsVisible(tc);
  506. }
  507.  
  508.  
  509. // not used 
  510.  
  511. function dt__getLocaleString(lsName)
  512. {
  513.  
  514.     var  myprop = 
  515.              Components.classes["@mozilla.org/intl/stringbundle;1"].
  516.              getService(Components.interfaces.nsIStringBundleService);
  517.     var mystrings = myprop.createBundle("chrome://mid/locale/choose_dict.properties");
  518.     return  mystrings.GetStringFromName(lsName);
  519.  
  520. }
  521.  
  522.  
  523. function dt__showDict()
  524. {
  525.     var i, j;
  526.     for (i in allDictArray) {
  527.         // alert(i);    
  528.         for (j in allDictArray[i]) {
  529.             dump(j.checked);
  530.         }
  531.     }
  532.     // alert(allDictArray["en_en"]["OneLook"]);
  533. }
  534.  
  535.  
  536.  
  537. function   dt__dictScroll() {
  538.   // alert("OK");
  539. }
  540.  
  541.  
  542.